 ///
 /// @file    Point.cc
 /// @author  lemon(haohb13@gmail.com)
 /// @date    2016-02-25 19:44:38
 ///
 
#include <iostream>

using std::cout;
using std::endl;

class Point
{
public:
	//成员初始化列表
	//初始化顺序是由数据成员在声明的顺序决定的
	Point() 
	: _ix(0)
	, _iy(0)
	{
		cout << "Point()" << endl;	
		//_ix = 10;//赋值语句
		//_iy = 20;
	}

	//explicit: 该构造函数要显式调用
	Point(int ix, int iy = 0)
	: _ix(ix)
	, _iy(iy)
	{
		cout << "Point(int, int)" << endl;
	}

	// 如果我们不显式定义析构函数，系统会自动为我们提供一个析构函数
	~Point()// 当对象被销毁的时候，会自动调用析构函数
	{
		cout << "~Point()" << endl;
	}

	void print()
	{
		cout << "(" << _ix << ", " << _iy << ")" << endl;
	}

private:
	int _ix;
	int _iy;
};


int main(void)
{
	int a;
	Point pt1;// pt1 栈对象
	pt1.print();
	cout << endl;

	Point pt2 = 3;//隐式转换,通过相应的构造函数创建一个临时对象
				  //再将这个临时对象通过复制构造函数来初始化的pt2
	pt2.print();
	return 0;
}
